aboutsummaryrefslogtreecommitdiff
path: root/src/routes/user/[user]/badges
Commit message (Collapse)AuthorAgeFilesLines
* fix(security): sanitize badge_wall_css server-side, render via textContentFuwn18 hours1-12/+1
| | | | | | | | | | | | | | | | Custom badge-wall CSS was sanitised only client-side with a fragile regex and injected via innerHTML, while the stored value stayed raw. Sanitise at the write boundary instead (setCSS, covering both the REST and GraphQL paths) with a css-tree pass that parses leniently and drops @import, behavior/-moz-binding, expression()/javascript: values, and </style> break-out attempts; render with textContent instead of innerHTML so break-out is impossible by construction (CSP already blocks inline script). css-tree stays server-only. A behaviour-gate test confirms ordinary CSS (backdrop-filter, content, url(), @media, @keyframes) is preserved while the dangerous constructs are removed. The previous regex also silently stripped all `content:` declarations; those now render correctly.
* style: apply biome autofixes and resolve remaining lint findingsFuwn4 days2-28/+27
| | | | | | | | | | | | | | Auto-fixed cosmetic findings (import ordering, obj["k"]->obj.k, optional chaining, template literals, Date.now, parseInt radix, useless ternaries/ switch cases). Resolved the non-autofixable rest by hand: - Senpy: static-only class -> object literal (no this/static reliance). - app.html: var global shim -> window.global = window (keeps the shim, drops the unused-var flag). - biome-ignore with rationale for the logout document.cookie clear and the holodule scrape non-null assertion. Verified: biome check 0 diagnostics, svelte-check 0/0, 24/24 unit tests.
* feat(analytics): track umami events across core actionsFuwn4 days1-2/+7
| | | | | | | | | Add a guarded track() wrapper (src/lib/analytics.ts) so programmatic events no-op instead of throwing when umami is absent (localhost), lazily loaded, or ad-blocked. Instrument the core loop (progress increment, roulette, list filter, force refresh), the auth funnel (log in/out, command palette), settings toggles/selects at the wrapper level, sync/debug/feed actions, and tool/sharing actions.
* refactor(locale): move hardcoded UI strings into english localeFuwn9 days1-47/+56
| | | | | | | | | | | | | | | | | Adds optional namespaces (common, errors, commandPalette, headTitle, notifications, schedule, events, home, reader, routes, badgePreview, badgeWall) and extends existing ones (settings.*, lists.*, tools.*, user.*, hololive.*) on the Locale interface. New fields are optional so japanese.ts can omit them; svelte-i18n's fallbackLocale handles the runtime miss. HeadTitle gains an optional routeKey prop for type-safe lookup. defaultActions becomes a factory so the command palette re-reads locale on language toggle. The existing JP feedback translation in routes/settings is preserved via japanese.ts. Out of scope (kept hardcoded): service-worker.ts, app.html, Landing*.svelte, tools.ts registry, Easter Event 2025 pages.
* fix(badges): hide outbound link noticeFuwn2026-04-011-1/+1
|
* chore(biome): drop formatter style overridesFuwn2026-03-013-345/+377
|
* chore(biome): re-enable noImplicitAnyLet ruleFuwn2026-03-011-1/+2
|
* chore(biome): enable svelte formattingFuwn2026-03-011-337/+337
|
* chore(types): decouple app code from fragile generated route typesFuwn2026-03-011-1/+1
|
* fix: Resolve all ESLint errors and warningsFuwn2026-01-291-3/+3
|
* fix: Add null guards and improve error messaging for user lookupsFuwn2026-01-232-5/+22
|
* refactor: Migrate event handlers to new Svelte 5 syntaxFuwn2026-01-231-19/+19
|
* refactor(layout): Replace empty p elements with reusable Spacer componentFuwn2026-01-231-17/+18
|
* fix(html): Replace self-closing non-void HTML elements with proper closing tagsFuwn2026-01-231-17/+17
|
* format: Apply Prettier formattingFuwn2025-12-151-18/+20
|
* feat(badges): Add a no-load query parameterFuwn2025-09-061-8/+15
|
* style(src): Remove self-closing p and div tagsFuwn2025-06-231-17/+17
|
* feat: Move remaining localStorage usages to localforageFuwn2025-06-121-3/+4
|
* fix(badges): Ignore empty user-set timeFuwn2025-05-041-1/+1
|
* fix(badges): Properly set badge time when mutatingFuwn2025-05-021-1/+1
|
* chore(prettier): use spaces instead of tabsFuwn2024-10-092-1047/+1047
|
* fix(graphql): wait for database update on badge mutationFuwn2024-10-071-1/+0
|
* fix(badges): fix field clearing regressionFuwn2024-10-071-0/+2
|
* chore(badges): remove old commentsFuwn2024-10-061-40/+0
|
* feat(badges): use locally cached identityFuwn2024-10-061-327/+301
|
* feat(badges): return user for badge mutationsFuwn2024-10-062-40/+62
|
* feat(badges): use preferences graphql apiFuwn2024-10-063-43/+55
|
* feat(badges): move badge operations to graphqlFuwn2024-10-064-400/+495
|
* refactor(Data): rename database referencesFuwn2024-08-241-2/+2
|
* refactor(Database): move Supabase user modules to User moduleFuwn2024-07-251-6/+6
|
* refactor(Database): separate providersFuwn2024-07-251-2/+2
|
* feat(BadgePreview): move seek buttons to preview panelFuwn2024-06-141-22/+4
|
* feat(badges): overseer wordingFuwn2024-06-131-5/+6
|
* fix(match): delayed and subtitled time compatibilityFuwn2024-05-241-4/+4
|
* fix(badges): shadow hide refreshFuwn2024-05-211-1/+1
|
* feat(badges): display number of shadow hiddenFuwn2024-05-211-2/+4
|
* fix(badges): use correct id when hidingFuwn2024-05-211-1/+1
|
* feat(badges): individual badges shadow hidingFuwn2024-05-201-0/+24
|
* fix(badges): null check preferencesFuwn2024-05-201-3/+6
|
* feat(badges): move admin panel into owner panelFuwn2024-05-151-198/+203
|
* feat(badges): allow dismiss noticeFuwn2024-05-151-1/+14
|
* refactor(badges): move badges display to componentFuwn2024-05-131-98/+11
|
* refactor(badges): move awc to componentFuwn2024-05-131-104/+3
|
* fix(badges): maintain pinned category orderFuwn2024-05-051-6/+7
|
* feat(badges): pinned categoriesFuwn2024-05-041-0/+10
|
* feat(BadgePreview): navigate using badge sideFuwn2024-05-021-1/+5
|
* feat(badges): dropdown designersFuwn2024-05-011-10/+43
|
* feat(badges): sort by time after groupingFuwn2024-04-301-1/+5
|
* feat(badges): allow awc badges hidingFuwn2024-04-281-33/+35
|
* fix(badges): awc badge tooltipFuwn2024-04-241-21/+13
|